/*******************************************************************************
 * 版权：北京润尼尔网络科技有限公司，保留所有版权<br>
 * 版本：v1.0.0<br>
 * 文件：CommandMoveVertices.js<br>
 * 日期：2016年9月20日<br>
 * 作者: 王志远<br>
 * 功能：添加命令<br>
 * 
 * 修改记录：<br>
 * 日期 描述 更新功能<br>
 ******************************************************************************/

window.makeNamespace(window,"Rainier.UI.V2");

/**
 * 类型名称：Rainier.UI.V2.CommandMoveVertices<br>
 * 类型功能：添加元件命令<br>
 */
Rainier.UI.V2.CommandMoveVertices = draw2d.command.CommandMoveVertices.extend({
	
	NAME : "Rainier.UI.V2.CommandMoveVertices",
	
	/**
	 * 函数名称：Rainier.UI.V2.CommandMoveVertices.init<br>
	 * 函数功能：构造函数<br>
	 * 异常信息：无<br>
	 */
	init : function(editPart){
		this.editPart = editPart;
		this._super(editPart.getFigure());
	},    
  

	/**
	 * 函数名称：Rainier.UI.V2.CommandMoveVertices.updateVertices<br>
	 * 函数功能：更新线段<br>
	 * 函数返回：无<br>
	 * 异常信息：无<br>
	 */
    updateVertices: function(newVertices)
    {
       this.newVertices = newVertices.clone(true);
   	   this.line.saveOldSegmentsByVertices(this.newVertices);
    },
	
	/**
	 * 函数名称：Rainier.UI.V2.CommandMoveVertices.undo<br>
	 * 函数功能：移动定点命令，撤销时执行该函数，使上一步的操作恢复原样<br>
	 * 函数返回：无<br>
	 * 异常信息：无<br>
	 */
    undo:function(){
    	this.line.saveOldSegmentsByVertices(this.oldVertices);
        this.line.setVertices(this.oldVertices);
    },
    
    /**
	 * 函数名称：Rainier.UI.V2.CommandMoveVertices.redo<br>
	 * 函数功能：连线顶点发生移动时，执行该函数，修改对应顶点的位置<br>
	 * 函数返回：无<br>
	 * 异常信息：无<br>
	 */
    redo:function(){
    	this.newVertices.each(function(i,vertice){
    	   	if(vertice.x% 9 !== 0){
    	   		vertice.x = vertice.x - vertice.x % 9;
    		}
    		if(vertice.y % 9 !== 0){
    			vertice.y = vertice.y - vertice.y % 9;
    		}
    	})
    	this.line.saveOldSegmentsByVertices(this.newVertices);
        this.line.setVertices(this.newVertices);
    },
    
    /**
	 * 函数名称：Rainier.UI.V2.CommandMoveVertices.removeMidVertex<br>
	 * 函数功能：当连着的三个点，x值相差的距离小于5，或y值相差的距离小于5。则把中间的点去掉<br>
	 * 参数输入：无<br>
	 * 参数输出：无<br>
	 * 函数返回：无<br>
	 * 异常信息：无<br>
	 */
    removeMidVertex : function(vertices){
    	for(var i = 0 ; i < vertices.getSize(); i++){
    		var beforeVertex  = vertices.get(i);
    		var midVertex   = null;
    		var afterVertex = null;
    		if(vertices.get(i+1)){    			
    			midVertex 	  = vertices.get(i+1);
    		}
    		if(vertices.get(i+2)){    			
    			afterVertex   = vertices.get(i+2);
    		}
    		if(midVertex && afterVertex){    			
    			if((Math.abs(midVertex.x-beforeVertex.x)<10 && Math.abs(midVertex.x-afterVertex.x)<10)
    					|| (Math.abs(midVertex.y-beforeVertex.y)<10 && Math.abs(midVertex.y-afterVertex.y)<10)){
    				vertices.removeElementAt(i+1);
    				i--;
    			}
    		}
    	}
    },
    
    /**
	 * 函数名称：<br>
	 * 函数功能：删除某些节点后,重新调整节点值。当移除中间节点时，会出现连线倾斜的问题，解决这个问题<br>
	 * 参数输入：无<br>
	 * 参数输出：无<br>
	 * 函数返回：无<br>
	 * 异常信息：无<br>  
	 */
    afterRemovePort : function(vertices){
    	var len =  vertices.getSize();
    	for(var i = 0 ; i < len-1; i++){
    		var firstVertex  = vertices.get(i);
    		var secondVertex = vertices.get(i+1);
    		if(Math.abs(firstVertex.x - secondVertex.x)<10){
    			vertices.get(i+1).x = firstVertex.x;
    		}
    		if(Math.abs(firstVertex.y - secondVertex.y)<10){
    			vertices.get(i+1).y = firstVertex.y;
    		}
    	}
    }
});

